package com.browsesoft;

import java.util.Hashtable;
import java.util.LinkedList;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * 权限类型管理器，负责从属性文件中装载各种资源所对应的 权限类型
 * 
 * @author browsesoft
 * @version 1.0
 */

public class RightTypeManager {
	/**
	 * 记录资源所对应的权限
	 */
	private static Hashtable resourceAndRight = new Hashtable();

	/**
	 * 从属性文件中装载各种资源所对应的权限类型
	 */
	public static void load() {
		Document doc = (Document) PropertiesService.getDocument();
		// 取得对象列表
		NodeList list = doc.getElementsByTagName("righttype");
		if (list.getLength() > 0) {
			Node tag = list.item(0);
			// 遍历每一个子节点
			for (int i = 0; i < tag.getChildNodes().getLength(); i++) {
				try {
					Node child = tag.getChildNodes().item(i);
					// 如果是element节点
					if (child.getNodeType() == Node.ELEMENT_NODE) {
						addRightType((Element) child);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * 为单个节点所对应的资源增加权限类型
	 * 
	 * @param element
	 *            节点
	 */
	private static void addRightType(Element element) {
		// 资源名
		String resourceType = element.getNodeName();
		// 资源权限类型
		String types = element.getAttribute("type");
		LinkedList list = Tools.stringToLinkedList(types);
		// 添加到hashtable中
		resourceAndRight.put(resourceType, list);
	}

	/**
	 * 根据资源类型取得相应的权限类型迭代器
	 * 
	 * @param resourceType
	 *            资源类型
	 * @return 权限类型迭代器
	 */
	public static LinkedList getRightType(String resourceType) {
		return (LinkedList) resourceAndRight.get(resourceType);
	}

}